粒度ロック granular lock
ロックの粒度は木構造をなしている
データベース全体(root)
データベース
テーブル
レコード
テーブルをロックすると暗黙の内にレコードもロックする
あるレコードをロックしているときにそのレコードを含むテーブルをロックすると競合する
それでは困るので新しいロックモードを導入する
インテントロック intent lock
MySQLの場合
MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.7.1 InnoDB ロック
lock table writeはtに対して排他ロック(X)
select ... for updateは行に対してX、テーブルに対してIX
ロック両立性行列 compatibility matrix
インテントロックの役割は誰かがテーブル内の行をロックしていることを示すため
行ロックしてるときにより荒い粒度でロックされることを防ぐ
粒度ロッキングプロトコル granularity of locking protocol
根(テーブル)から葉(レコード)へロックを取得する
ロックの解放は葉から根へ
複数粒度ロック MGW(Multiple Granularity Locking)